#!/usr/bin/env python
# -*- coding: utf8 -*-
# 
# Programado por Juan Marcelo Conca y Pablo Carrai

#
# Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo
# los términos de la Licencia Pública General GNU, tal y como está publicada
# por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su
# elección) cualquier versión posterior.
#
# Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA
# GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN
# FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.
#
# Usted debería haber recibido una copia de la Licencia Pública General GNU
# junto a este programa; si no es así, escriba a la Free Software Foundation,
# Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU.
#
# Programado en python utilizando geany como editor, y para la parte grafica
# wxglade



import wx
import MySQLdb



class Busqueda(wx.Frame):
	# Clase principal en la busqueda
    def __init__(self, *args, **kwds):

        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        self.label_1 = wx.StaticText(self.panel_1, -1, u"Agenda telefónica", style=wx.ALIGN_CENTRE)
        self.label_2 = wx.StaticText(self.panel_1, -1, "Ingrese el apellido\nde la persona que busca :")
        self.text_ctrl_1 = wx.TextCtrl(self.panel_1, -1, "")
        self.text_ctrl_1.SetFocus()
        self.panel_2 = wx.Panel(self.panel_1, -1)
        #self.button_3 = wx.Button(self.panel_1, wx.ID_CLEAR, '')
        #self.Bind(wx.EVT_BUTTON,self.OnBuscarOtraPersona,self.button_3)
        self.button_1 = wx.Button(self.panel_1, wx.ID_OK, '')
        self.Bind(wx.EVT_BUTTON,self.OnBuscar,self.button_1)
        self.button_2 = wx.Button(self.panel_1, wx.ID_CANCEL, '')
        self.Bind(wx.EVT_BUTTON,self.OnSalir,self.button_2)

        self.__set_properties()
        self.__do_layout()

      
    def __set_properties(self):
    	# Agregamos propiedades de fuente titulo y tamaño

        self.SetTitle("Busqueda de contactos")
        self.label_1.SetFont(wx.Font(16, wx.MODERN, wx.NORMAL, wx.BOLD, 0, ""))
        self.text_ctrl_1.SetMinSize((100, 20))
        self.CenterOnScreen()


        
    def __do_layout(self):

        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_5 = wx.FlexGridSizer(2, 1, 0, 0)
        grid_sizer_6 = wx.FlexGridSizer(3, 2, 0, 0)
        grid_sizer_7 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_2 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_5.Add(self.label_1, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_6.Add(self.label_2, 0, wx.ALL|wx.EXPAND, 10)
        grid_sizer_6.Add(self.text_ctrl_1, 0, wx.ALL|wx.EXPAND, 15)
        grid_sizer_2.Add(self.panel_2, 1, wx.EXPAND, 0)
        #grid_sizer_2.Add(self.button_3, 0, wx.ALL|wx.EXPAND|wx.ALIGN_BOTTOM, 10)
        grid_sizer_2.AddGrowableRow(0)
        grid_sizer_2.AddGrowableCol(0)
        grid_sizer_2.AddGrowableCol(1)
        grid_sizer_6.Add(grid_sizer_2, 1, wx.EXPAND, 0)
        grid_sizer_7.Add(self.button_1, 0, wx.ALL|wx.EXPAND|wx.ALIGN_BOTTOM, 10)
        grid_sizer_7.Add(self.button_2, 0, wx.ALL|wx.EXPAND|wx.ALIGN_BOTTOM, 10)
        grid_sizer_7.AddGrowableCol(0)
        grid_sizer_7.AddGrowableCol(1)
        grid_sizer_6.Add(grid_sizer_7, 1, wx.EXPAND, 0)
        grid_sizer_6.AddGrowableCol(1)
        grid_sizer_5.Add(grid_sizer_6, 1, wx.EXPAND, 0)
        self.panel_1.SetSizer(grid_sizer_5)
        grid_sizer_5.AddGrowableCol(0)
        sizer_1.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()


    def OnSalir(self, event):        
        try:
            self.Destroy()            
        finally:
            import principal
            ventana = principal.Principal(None, -1,"")
            ventana.Show(True)
            
    def OnBuscarOtraPersona(self, event):
        self.text_ctrl_1.Clear()


    def OnBuscar(self, event):
    	
    	# Capturamos el dato dentro del area de la busqueda
        apellido = self.text_ctrl_1.GetValue()            
        
        # Arrancamos la conexion a la base de datos
        self.db=MySQLdb.connect(host='localhost',user='amalia',passwd='amalia',db='agenda')
        
        # Creamos un cursor de la misma
        cursor=self.db.cursor()
 
        # Y ejecutamos una orden SQL que inserta los datos capturados desde los textctrl
        cursor.execute('''SELECT id, nombre, apellido, telefono FROM contactos where apellido = %s''',(apellido)) 
 
        cursors = cursor.fetchall()
 
        # No nos olvidamos de cerrar el cursor
        cursor.close()
      	
      	# esto de abajo es una tupla que formamos del resultado de la busqueda
        self.resultados = [("%d, %s, %s, %s" % tuple(a)) for a in cursors] 
  
        # en esta parte utilizamos una funcion para ver si hay algun registro
        # si no existe datos como resultado vamos a un dialogo
        if cursor.rowcount==0:
            dialogo = wx.MessageDialog(None, u'No se encontro ningun registro con esos datos', u'No hay coincidencias', wx.OK | wx.ICON_INFORMATION)
            dialogo.ShowModal()       
                        
        else:

            self.OnElegir(self)

    def OnElegir(self, event):
    	
        # creamos un SingleChoiceDialog para traer el resultado de la busqueda
        dlg = wx.SingleChoiceDialog(None,u"Resultado de la busqueda",u"resultado", self.resultados)
        
        # si el usuario preciona ok
        if dlg.ShowModal() == wx.ID_OK:
            thechoseone=dlg.GetStringSelection()
            self.telefono = thechoseone
            dividoparaconquistar=self.telefono.split()
            self.necesito = dividoparaconquistar[0]
            dlg.Destroy()
            self.OnListar(self)

    def OnListar(self, event):
        # Creamos un cursor de la misma
        cursor=self.db.cursor()
 
        # Y ejecutamos una orden SQL que inserta los datos capturados desde los textctrl
        cursor.execute('''SELECT * FROM contactos where id = %s''',(self.necesito)) 
 
        cursors = cursor.fetchall()
 
        # No nos olvidamos de cerrar el cursor
        cursor.close()
      
        self.resultados = [("%s, %s, %s, %s, %s, %s" % tuple(a)) for a in cursors]
        nombre = cursors[0][1]
        apellido = cursors[0][2]
        telefono = cursors[0][3]
        mail = cursors[0][4]
        direccion = cursors[0][5]

        
        mensaje= '''
Nombre          %s
Apellido        %s
Telefono        %s
Mail            %s
Direccion       %s        
        '''%(nombre, apellido, telefono, mail, direccion)
         
        dialogo = wx.MessageDialog(None, mensaje, u'', wx.OK)
        dialogo.ShowModal()
        dialogo.Destroy()
        

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    ventana = Busqueda(None, -1, "")
    app.SetTopWindow(ventana)
    ventana.Show()
    app.MainLoop()
